Mihai Balan

Cache miss

Ca student la Poli, asistent la anul I la materii legate destul de strâns de calculatoare (Programare, respectiv Structuri de Date și Algoritmi) și mai apoi membru în echipe de interviu am auzit destul de des replica „Nu trebuie să știu toate funcțiile / algoritmii / parametrii pe dinafară, pot oricând să îi caut pe net / în documentație”.

Lucrul ăsta l-am auzit spus de alții sau chiar (mi) l-am spus eu, în diverse situații și contexte. Mai mereu însă, afirmația îmi crea un oarecare disconfort, fără însă să am un argument convingător împotriva ei. Lipsa unui argument venea și din faptul că la face value, afirmația e una justă. Nu trebuie și nu poți ști sau memora totul. Problema mea cu afirmația respectivă venea din faptul că argumentul imposibilității de a memora totul era folosit ca scuza pentru a discredita orice îndemn la memorare sau pentru a explica goluri majore în cunoștințe de bun simț în contextul respectiv. În plus, nici nu aveam vreun contraargument bun, în afară de un destul de generic, „Trebuie totuși să știi măcar ceva!”

Argumentul convingător l-am găsit observându-mă pe mine, în timp ce meșteream la un script python când am realizat, destul de enervat, cât de încet mă mișc pentru că o dată la 3 linii trebuia să caut ceva în documentație. Asta în condițiile în care în IDE aveam auto-complete. Am realizat ulterior că argumentul împotriva afirmației enervante nu ține de caracteristicile „funcționale”, ci de cele „non-funcționale”, mai precis de performanță. Problema se reduce la clasica problemă a timpului de acces la resurse, dacă facem următoarele paralele / analogii:

  1. Memorie cache – lucruri memorate
  2. Memorie RAM – IDE auto-complete
  3. Stocare locală – documentație oficială, pagini de manual sau help integrat (pentru probleme punctuale, gen ordinea parametrilor)
  4. Acces la rețea – căutat răspunsuri la probleme complexe pe site-uri gen StackOverflow

În condițiile astea, argumentul devine simplu: nu poți ține totul în cache dar nici a face un roundtrip la server pentru fiecare operație nu este acceptabil. Bineînțeles, soluția va fi diferită de la caz la caz, dar a minimiza numărul de cache misses poate fi un aspect important al soluției.

Și, pentru viitor, cred că „Ce poți să îmi spui despre caching?” e o replică bună la „Nu trebuie să știu toate funcțiile pe dinafară, pot oricând să caut pe net”.